package it.poste.il.compensatore.aop;

import java.util.Arrays;
import java.util.Date;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@SuppressWarnings("unused")
@Aspect
public class LogAroundAspect {
	
	/*
	 * Applicato a tutti i metodi pubblici 
	 * delle classi contenute nei package della gerarchia it
	 */	
	//@Around("execution(* it..*(..))")
	public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
		
		// Log prima dell'invocazione del metodo
		System.out.println("[" + new Date() + "]\n\t" 
				+  pjp.getTarget().getClass() + "."  +  pjp.getSignature().getName()
				+  "\n\tArgomenti: "+ Arrays.toString(pjp.getArgs()));
		
		Object result = null;
		try {
			// Invocazione metodo
			result = pjp.proceed();
		} catch (Exception ex) {
			System.err.println("\tErrore: " + pjp.getSignature().getName());
		}
		
		//Operazioni dopo l'esecuzione
		System.out.println("\tRisultato: "+ result);			
		return result;
	}
}
